#!/usr/bin/perl
# 
# Este script permite depurar el listado de usuarios
# de OpenLDAP, y generar el listado limpio...
#
 use MIME::Base64;

 if ( 2 != $#ARGV ) {
    print "ERROR: Debes pasar <Listado_user_SAMBA>  <Listado_user_LDAP>\n";
    exit 4;
 }

 # Cargar el listado de usuarios de SAMBA...
 open (FILE, $ARGV[0] );
 @smbUsers=<FILE>;
 close FILE;

 # Abrir en modo lectura el fichero de LDAP
 open(FILE,"<". $ARGV[1]) || die ("ERROR: No puedo abrir [".$ARGV[1]."]\n");
 # Leer el fichero de LDAP...
 while ( chomp($linea=<FILE>) ) {
    if ( $linea=~m/^uid:\s(\S+)\s*$/ ) {
       $Uid=$1;
    } elsif ( $linea=~m/^sn:\s(\S.+\S)\s*$/ ) {
       $Sn=$1;
    } elsif ( $linea=~m/^sambaAcctFlags:\s(\S.+\S)\s*$/ ) {
       $Flags=$1;
    } elsif ( $linea=~m/^sn::\s(\S+)\s*$/ ) {
       $Sn=decode_base64($1);
    } elsif ( $linea=~m/^dn:\s(\S.+\S)\s*$/ ) {
       $newDn=$1;
       if ( ( "" ne "$Dn" ) && ( "" ne "$Uid" )) {
          if ( grep( /^$Uid$/, @smbUsers ) ) {
             if (( grep(/$ARGV[2]/, $Dn)) || ( grep(/administrador/i, $Uid )) ) { 
                print "NO#";
             }else{
                print "SI#";
             }
             print lc($Uid) ."#". uc($Sn) ."#";
             # si es usuario educarm o no
             if ( grep(/$ARGV[2]/, $Dn)) {
                print "SI#";
             }else{
                print "NO#";
             }
             # si esta bloqueado o no
             if ( grep(/D/, $Flags)) {
                print "SI#\n";
             }else{
                print "NO#\n";
             }
          }
       }
       $Dn=$newDn;
       $Flags="";
       $Uid="";
       $Sn="";
    }
 } 
 close FILE;

       if ( ( "" ne "$Dn" ) && ( "" ne "$Uid" )) {
          if ( grep( /^$Uid$/, @smbUsers ) ) {
             if (( grep(/$ARGV[2]/, $Dn)) || ( grep(/administrador/i, $Uid )) ) { 
                print "NO#";
             }else{
                print "SI#";
             }
             print lc($Uid) ."#". uc($Sn) ."#";
             # si es usuario educarm o no
             if ( grep(/$ARGV[2]/, $Dn)) {
                print "SI#";
             }else{
                print "NO#";
             }
             # si esta bloqueado o no
             if ( grep(/D/, $Flags)) {
                print "SI#\n";
             }else{
                print "NO#\n";
             }
          }
       }

